/*
 * @Author: 13177709051 3506463075@qq.com
 * @Date: 2024-12-03 15:50:15
 * @LastEditors: 13177709051 3506463075@qq.com
 * @LastEditTime: 2024-12-03 15:56:20
 * @FilePath: /highly-concurrent-server/example/regex.cpp
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
#include <iostream>
#include <string>
#include <regex>

int main()
{
    std::string str = "/numbers/1234";
    // 匹配以 /numbers/起始, 后边跟了一个或多个数字字符的字符串, 并且在匹配的过程中提取这个匹配到的数字字符串
    std::regex e("/numbers/(\\d+)");
    std::smatch matches;

    bool ret = std::regex_match(str, matches, e);
    if(ret == false)
    {
        return -1;
    }
    for(auto &s : matches)
    {
        std::cout << s << std::endl;
    }
    return 0;
}

// /numbers/: 匹配字符串中的 /numbers/ 字符串部分。
// (\\d+): 是一个捕获组，用于提取匹配的数字部分。
// \\d 表示一个数字字符（0-9），+ 表示匹配一个或多个数字。
// 为什么使用 \\ 而不是单个 \? 因为在 C++ 字符串中，反斜杠 \ 是一个转义字符，必须使用 \\ 来表示实际的反斜杠。

// matches 存储的是一个 std::smatch 类型的容器，它包含了所有匹配的字符串（包括整个匹配部分和各个捕获组）。
// 使用 for 循环遍历 matches，并将每个匹配部分输出到标准输出。
// 由于正则表达式中的 (\\d+) 是一个捕获组，matches 的第一个元素是整个匹配的字符串，即 /numbers/1234。
// 第二个元素是捕获组中的内容，即数字部分 1234。